package com.yien;

/**
 * 二进制权限
 *
 * @author Miaoxiong Fan
 * @since version
 */

/**
 * 例如设计分别可以发送 邮件、短信、系统消息、IM
 * 可以设置八位的二进制进行存储发送方式 0000 0000
 * 0000 0001 邮件
 * 0000 0010 短信
 * 0000 0100 系统消息
 * 0000 1000 IM
 * 则：0000 0011 标识同时可以发送邮件和短信
 */
public class BitAuthority {

    /**
     * 判断
     * @param mod 用户当前值
     * @param value  需要判断值
     * @return 是否存在
     */
    public static boolean hasMark(long mod, long value) {
        return (mod & value) == value;
    }

    /**
     * 增加
     * @param mod 已有值
     * @param value  需要添加值
     * @return 新的状态值
     */
    public static long addMark(long mod, long value) {
        if (hasMark(mod, value)) {
            return mod;
        }
        return (mod | value);
    }

    /**
     * 删除
     * @param mod 已有值
     * @param value  需要删除值
     * @return 新值
     */
    public static long removeMark(long mod, long value) {
        if (!hasMark(mod, value)) {
            return mod;
        }
        return mod ^ value;
    }
}
